package com.woniuxueyuan.util;

import java.util.Arrays;
import java.util.List;

@FunctionalInterface
interface Foo{
    public abstract void f1(int i);
    default void f2(){

    };

}

public class Iambda {
    public static void main(String[] args) {
        //lambda就是代替代码中出现的匿名类内部类语法写法
        //匿名内部类：就是直接new接口
        //1.lambda把接口名删除，加上->
        //2.把接口中的方法中删除，只保留一个大括号就可以
        //匿名内部类改成lambda有一个要求：该接口只有一个抽象方法
        //函数式接口：该接口只能有一个抽象方法
        //java8在接口中允许方法有方法体
        //@FunctionalInterface有校验功能，只能有一个抽象方法
//        Thread thread = new Thread(() -> {
//            System.out.println();
//        });

        //1.无参数无返回值写法，当方法体只有一行代码，大括号可以省略
//        Foo foo = ()-> System.out.println("11111");
//        foo.f1();
        //2.无参数有返回值，只有一行代码大括号可以省略，但是return也要省略
//        Foo foo=() ->1000;
//        System.out.println(foo.f1());
    //3有参数无返回值，参数类型都可以不写，只有一个参数适，小括号可以不写
        Foo foo=j-> System.out.println(j*j);
        foo.f1(5);

//        Foo foo=(i,j)-> System.out.println(i*j)
        //4.有参数有返回值
//        Foo foo(i,j)->i*j;
//        System.out.println(foo.f1(3,3));

        List<String> list = Arrays.asList("1", "2", "3", "4", "5", "6");
        list.forEach(System.out::println);



    }
}
